@@ -556,3 +556,52 @@ def statistic_consumer(request):  | 
            ||
| 556 | 556 | 
                'model_logs': model_logs,  | 
            
| 557 | 557 | 
                'province_logs': province_logs,  | 
            
| 558 | 558 | 
                })  | 
            
| 559 | 
                +  | 
            |
| 560 | 
                +def record_consumer(request):  | 
            |
| 561 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 562 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 563 | 
                +    start_time = request.POST.get('start_time', '')
               | 
            |
| 564 | 
                +    end_time = request.POST.get('end_time', '')
               | 
            |
| 565 | 
                +    model_name = request.POST.get('model_name', '')
               | 
            |
| 566 | 
                +    phone = request.POST.get('phone', '')
               | 
            |
| 567 | 
                +  | 
            |
| 568 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 569 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 570 | 
                +  | 
            |
| 571 | 
                + try:  | 
            |
| 572 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 573 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 574 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 575 | 
                +  | 
            |
| 576 | 
                + logs = ConsumeInfoSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, model_uni_name__contains=model_name, phone__contains=phone)  | 
            |
| 577 | 
                +  | 
            |
| 578 | 
                + logs = [log.admindata for log in logs]  | 
            |
| 579 | 
                +  | 
            |
| 580 | 
                +    return response(200, 'Get Consumer Record Success', u'获取消费者销售记录成功', data={
               | 
            |
| 581 | 
                + 'logs': logs  | 
            |
| 582 | 
                + })  | 
            |
| 583 | 
                +  | 
            |
| 584 | 
                +def record_sale(request):  | 
            |
| 585 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 586 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 587 | 
                +    start_time = request.POST.get('start_time', '')
               | 
            |
| 588 | 
                +    end_time = request.POST.get('end_time', '')
               | 
            |
| 589 | 
                +    model_name = request.POST.get('model_name', '')
               | 
            |
| 590 | 
                +    clerk_name = request.POST.get('clerk_name', '')
               | 
            |
| 591 | 
                +    distributor_name = request.POST.get('distributor_name', '')
               | 
            |
| 592 | 
                +  | 
            |
| 593 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 594 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 595 | 
                +  | 
            |
| 596 | 
                + try:  | 
            |
| 597 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 598 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 599 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 600 | 
                +  | 
            |
| 601 | 
                + logs = SaleclerkSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, test_sn=False, model_uni_name__contains=model_name, clerk_name__contains=clerk_name, distributor_name__contains=distributor_name)  | 
            |
| 602 | 
                +  | 
            |
| 603 | 
                + logs = [log.admindata for log in logs]  | 
            |
| 604 | 
                +  | 
            |
| 605 | 
                +    return response(200, 'Get Sale Record Success', u'获取销售员销售记录成功', data={
               | 
            |
| 606 | 
                + 'logs': logs  | 
            |
| 607 | 
                + })  | 
            
                @@ -309,6 +309,9 @@ urlpatterns += [  | 
            ||
| 309 | 309 | 
                 | 
            
| 310 | 310 | 
                url(r'^admin/dashboard$', admin_views.dashboard, name='dashboard'),  | 
            
| 311 | 311 | 
                url(r'^admin/statistic/consumer$', admin_views.statistic_consumer, name='statistic_consumer'),  | 
            
| 312 | 
                +  | 
            |
| 313 | 
                + url(r'^admin/record/consumer$', admin_views.record_consumer, name='record_consumer'),  | 
            |
| 314 | 
                + url(r'^admin/record/sale$', admin_views.record_sale, name='record_sale'),  | 
            |
| 312 | 315 | 
                ]  | 
            
| 313 | 316 | 
                 | 
            
| 314 | 317 | 
                urlpatterns += [  | 
            
                @@ -2,7 +2,8 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from django.db import models  | 
            
| 4 | 4 | 
                from django.utils.translation import ugettext_lazy as _  | 
            
| 5 | 
                -from django_models_ext import BaseModelMixin, upload_path  | 
            |
| 5 | 
                +from django_models_ext import BaseModelMixin, upload_path, upload_file_path, upload_file_url  | 
            |
| 6 | 
                +from TimeConvert import TimeConvert as tc  | 
            |
| 6 | 7 | 
                 | 
            
| 7 | 8 | 
                from mch.models import ModelInfo  | 
            
| 8 | 9 | 
                 | 
            
                @@ -124,3 +125,30 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):  | 
            ||
| 124 | 125 | 
                 | 
            
| 125 | 126 | 
                def __unicode__(self):  | 
            
| 126 | 127 | 
                return unicode(self.pk)  | 
            
| 128 | 
                +  | 
            |
| 129 | 
                + @property  | 
            |
| 130 | 
                + def image_path(self):  | 
            |
| 131 | 
                + return upload_file_path(self.image)  | 
            |
| 132 | 
                +  | 
            |
| 133 | 
                + @property  | 
            |
| 134 | 
                + def image_url(self):  | 
            |
| 135 | 
                + return upload_file_url(self.image)  | 
            |
| 136 | 
                +  | 
            |
| 137 | 
                + @property  | 
            |
| 138 | 
                + def admindata(self):  | 
            |
| 139 | 
                +        return {
               | 
            |
| 140 | 
                + 'pk': self.pk,  | 
            |
| 141 | 
                + 'model_name': self.model_name,  | 
            |
| 142 | 
                + 'model_uni_name': self.model_uni_name,  | 
            |
| 143 | 
                + 'code': self.code,  | 
            |
| 144 | 
                + 'trackingNo': self.trackingNo,  | 
            |
| 145 | 
                + 'is_staff_delete': self.is_staff_delete,  | 
            |
| 146 | 
                + 'code_version': self.code_version,  | 
            |
| 147 | 
                + 'clerk_name': self.clerk_name,  | 
            |
| 148 | 
                + 'distributor_name': self.distributor_name,  | 
            |
| 149 | 
                + 'remark': self.remark,  | 
            |
| 150 | 
                + 'dupload': self.dupload,  | 
            |
| 151 | 
                + 'has_scan': self.has_scan,  | 
            |
| 152 | 
                + 'image': self.image_url,  | 
            |
| 153 | 
                + 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),  | 
            |
| 154 | 
                + }  | 
            
                @@ -695,6 +695,20 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):  | 
            ||
| 695 | 695 | 
                'dupload': self.dupload,  | 
            
| 696 | 696 | 
                'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),  | 
            
| 697 | 697 | 
                }  | 
            
| 698 | 
                +  | 
            |
| 699 | 
                + @property  | 
            |
| 700 | 
                + def admindata(self):  | 
            |
| 701 | 
                +        return {
               | 
            |
| 702 | 
                + 'pk': self.pk,  | 
            |
| 703 | 
                + 'user_id': self.user_id,  | 
            |
| 704 | 
                + 'model_name': self.model_name,  | 
            |
| 705 | 
                + 'model_uni_name': self.model_uni_name,  | 
            |
| 706 | 
                + 'serialNo': self.serialNo,  | 
            |
| 707 | 
                + 'phone': self.phone,  | 
            |
| 708 | 
                + 'code_version': self.code_version,  | 
            |
| 709 | 
                + 'dupload': self.dupload,  | 
            |
| 710 | 
                + 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),  | 
            |
| 711 | 
                + }  | 
            |
| 698 | 712 | 
                 | 
            
| 699 | 713 | 
                 | 
            
| 700 | 714 | 
                class ActivityInfo(BaseModelMixin):  |